package version1;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * 版本1--封装【拓展】
 * Mysql工具类
 * 1.数据库：地址、用户名、密码  私有属性--静态化【本类直接调用】
 * 2.静态方法【本类直接调用】getParam(String 路径)
 *  目的：使用方法调用外部文件   db_mysql.properties
 *       db_mysql.properties   对应 Java Properties类：读取键值对形式信息
 *       Properties类 提供方法 load() 读取配置文件信息【键值对-数据库基本信息】
 * 3.通过封装概念--连接成功数据【通用一个类连接Mysql和Oracle】
 */
public class Mysql {
//    1.任何数据库具备：地址、用户名、密码----私有静态属性
    private static String url;
    private static String username;
    private static String password;
//    2.静态方法：getParam(String 路径)---连接数据库--读取信息
//    2.1 配置文件：配置对出现，保存数据库对应的基本信息  xxx.properties

    public static void getParam(String fileName) throws IOException, SQLException {
//    2.2 Properties类--读取 xxx.properties 配置文件信息
        Properties p=new Properties();
//    2.3 外置文件读取---借助IO流--搬运数据--InputStream
        InputStream fis=
//      Mysql.class 表示当前 Mysql类的Class对象
//            理解：图书馆--区域存Mysql相关书籍
//      getClassLoader() 获取当前类的加载器【加载器负责读取配置文件信息】
//            理解：图书馆--区域存Mysql相关书籍--图书管理员
//      getResourceAsStream(文件) 获取当前加载器中键值对信息
//            理解：图书馆--区域存Mysql相关书籍--图书管理员---拿明确的书籍
       Mysql.class.getClassLoader().getResourceAsStream(fileName);
        p.load(fis);
//        2.4 读取数据库基本信息【url、username、password】赋值给当前对象【url、用户、密码】
//        读取db_mysql.properties中 的键
        url=p.getProperty("url");
        username=p.getProperty("username");
        password=p.getProperty("password");
        System.out.println(url+username+password);

        //    参考Mysql封装，写Oracle封装【作业2】
//    连接成功Mysql----book表--增加一条记录操作
//    1.创建连接---Connection 代表Java连接成功数据库
      Connection con= DriverManager.getConnection(url,username,password);
//    2.执行sql---Statement   代表Java执行数据 sql
      Statement st=con.createStatement();
//    3.【CRUD操作：增删改 executeUpdate() 查executeQuery】
      String sql= " insert into book values(6,'余华','活着',79,'2010年',80,'否')";
      int rows= st.executeUpdate(sql); //执行增删改，返回值 int类型
        System.out.println("成功添加："+rows+"这条记录");
//    4.关闭连接----Statement--Connection
        st.close(); con.close();
    }

    public static void main(String[] args) throws IOException, SQLException {
//        测试封装概念--连接成功数据库
        Mysql.getParam("db_mysql.properties");

    }
}
